+2008-11-16 Martin Nordholts <martinn@svn.gnome.org>
+
+ * babl/babl.h: Add #define BABL_ALPHA_THRESHOLD which is the alpha
+ threshold used in the reference implementation for
+ un-pre-multiplication of color data.
+
+ * babl/base/model-rgb.c
+ * babl/base/model-gray.c
+ * extensions/gegl-fixups.c: Use the define, a consistent alpha
+ threshold improves accurucy of conversions.
+
2008-11-16 Martin Nordholts <martinn@svn.gnome.org>
* extensions/gegl-fixups.c (conv_rgbAF_sdl32)
*/
#define BABL_MAGIC 0xbAb100
+/* Alpha threshold used in the reference implementation for
+ * un-pre-multiplication of color data.
+ */
+#define BABL_ALPHA_THRESHOLD 0.0001
+
enum {
BABL_INSTANCE = BABL_MAGIC,
BABL_TYPE,
double luminance = *(double *) src[0];
double alpha = *(double *) src[1];
- if (alpha > 0.00001)
+ if (alpha > BABL_ALPHA_THRESHOLD)
{
luminance = luminance / alpha;
}
alpha = *(double *) src[src_bands - 1];
for (band = 0; band < src_bands - 1; band++)
{
- if (alpha > 0.001)
+ if (alpha > BABL_ALPHA_THRESHOLD)
{
*(double *) dst[band] = *(double *) src[band] / alpha;
}
alpha = *(double *) src[src_bands - 1];
for (band = 0; band < src_bands - 1; band++)
{
- if (alpha > 0.001)
+ if (alpha > BABL_ALPHA_THRESHOLD)
{
*(double *) dst[band] = *(double *) src[band] / alpha;
}
while (n--)
{
double alpha = ((double *) src)[3];
- if (alpha > 0.0001)
+ if (alpha > BABL_ALPHA_THRESHOLD)
{
((double *) dst)[0] = gamma_2_2_to_linear (((double *) src)[0] / alpha);
((double *) dst)[1] = gamma_2_2_to_linear (((double *) src)[1] / alpha);
{
float ca = src[i];
int ret;
- if (alpha < 0.0001)
+ if (alpha < BABL_ALPHA_THRESHOLD)
ret = 0;
else
ret = table_F_8g[gggl_float_to_index16 (ca / alpha)];
while (n--)
{
float alpha = src[3];
- if (alpha < 0.00001)
+ if (alpha < BABL_ALPHA_THRESHOLD)
{
dst[0] = 0;
dst[1] = 0;
{
float alpha = src[3];
float recip = 1.0/alpha;
- if (alpha < 0.00001)
+ if (alpha < BABL_ALPHA_THRESHOLD)
recip = 0.0;
dst[0] = src[0] * recip;
dst[1] = src[1] * recip;
{
float alpha = src[3];
float recip = (1.0/alpha);
- if (alpha < 0.00001)
+ if (alpha < BABL_ALPHA_THRESHOLD)
{
dst[0] = dst[1] = dst[2] = dst[3] = 0;
}